<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>函数</title>
</head>

<body>
    <script>
        // 利用函数计算1-100之间的累加和
        //声明函数
        function getSum() {
            var sumNum = 0; //准备一个变量
            for (var i = 1; i <= 100; i++) {
                sunNum += i; //把每个数值 都累加到变量中 
            }
            alert(sunNum);
        }
        getSum();//调用函数

        //利用函数求任意两个数的和
        function getSum1(num1, num2) {
            console.log(num1 + num2);
        }
        getSum1(1, 3); // 4

        //实参与形参不匹配
        function getSum(num1, num2) {
            console.log(num1 + num2);
        }
        getSum(100, 200);  //形参和实参个数相等，输出正确结果
        getSum(100, 200, 600, 300);//实参个数多于形参，只取到形参的个数
        getSum(200);//实参个数少于形参，多的形参定义为undefined,结果为NaN

        // 声明了一个sum()函数，该函数的返回值为666
        // 声明函数
        function sum() {
            return 666;
        }
        // 调用函数
        console.log(sum())
        // 此时 sum 的值就等于666，因为 return 语句会把自身后面的值返回给调用者

        //求数组 [5,2,99,101,67,77] 中的最大数值。
        //定义一个获取数组中最大数的函数
        function getMaxFromArr(numArray) {
            var maxNum = numArray[0];
            for (var i = 0; i < numArray.length; i++) {
                if (numArray[i] > maxNum) {
                    maxNum = numArray[i];
                }
            }
            return maxNum;
        }
        var arrNum = [5, 2, 99, 101, 67, 77];
        var maxN = getMaxFromArr(arrNum); // 这个实参是个数组
        alert('最大值为：' + maxN);

        //return 语句之后的代码不被执行。
        function add(num1, num2) {
            //函数体
            return num1 + num2; // 注意：return 后的代码不执行
            alert('我不会被执行，因为前面有 return');
        }
        var resNum = add(21, 6); // 调用函数，传入两个实参，并通过 resNum 接收函数返回值
        alert(resNum);	// 27

        //return 只能返回一个值。如果用逗号隔开多个值，以最后一个为准
        function add(num1, num2) {
            //函数体
            return num1, num2;
        }
        var resNum = add(21, 6); // 调用函数，传入两个实参，并通过 resNum 接收函数返回值
        alert(resNum);

        //
        //例1
        // function(){
        //     var x=10;
        //     var y=5;
        //     return function(){
        //         return x+y
        //     }
        // }
        // 赋值再执行           自我执行
        //例2
        // function () {
        //     document.write('hello');
        //     return function () {
        //         var x = 10;
        //         var y = 20;
        //         if (x > y) {
        //             return x * y;
        //         } else {
        //             return x - y;
        //         }
        //     }
        // }
        //面试题
            (function (a) {
                console.log(a);
            })(function () {
                return 5;
            }())
        
        //  自执行函数 嵌套函数
        // var a = (function(){
        //     var x = 10;
        //     var y = 5;
        //     return function(){   //调用a()返回函数
        //         return x*y;
        //     }
        // })();
        // var b = a();
        // console.log(b)


        // 嵌套自执行函数
        var b = (function(){
            var x = 10;
            var y = 5;
            return function(){
                return x*y;
            }
        })()();
        console.log(b);
    </script>
</body>

</html>